library(dplyr)
library(ggplot2)
library('corrplot')
library(caret)
library(plotly)
all_data <- read.csv(file="elektrownie.csv", header=TRUE, sep=",")
needed_data <- all_data %>% select(-icon)
colnames(needed_data) <- c("measurementId", "place", "model", "brand", "latitude","longitude", "age", "year", "day", "hour", "date", "temperature", "radiation", "pressure", "windspeed", "humidity", "dewpoint", "bearing", "cloudcover", "temp_param", "radiation_param", "pressure_param", "wind_param", "humidity_param", "dewpoint_param","bearing_param", "cloud_param", "distance", "altitude", "azimuth", "altitude_param", "azimuth_param","pcnm1", "pcnm2", "pcnm3", "pcnm4", "pcnm5", "pcnm6", "pcnm7", "pcnm8", "pcnm9", "pcnm10", "pcnm11", "pcnm12", "pcnm13", "pcnm14", "pcnm15", "mode", "mode_param","energy")
needed_data$only_day <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%d"))
needed_data$only_month <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%m"))
needed_data$only_hour <- as.numeric(format(as.POSIXct(factor(needed_data$date),format="%m/%d/%Y %H:%M"),"%H"))
needed_data$place_string <- paste("place: ", as.character(needed_data$place))
needed_data$date_posix <- as.POSIXct(as.character(needed_data$date), format="%m/%d/%Y %H:%M")
W zbiorze występują dane dla 17 różnych lokalizacji.
idbrands_with_models <- unique(needed_data[c("brand", "model")])
idmodels <- unique(needed_data$model)
idbrands <- unique(needed_data$brand)
idplaces <- unique(needed_data$place)
gps <- unique(needed_data[c("latitude", "longitude")])
gps_with_places_id <- unique(needed_data[c("latitude", "longitude", "place")])
Przed dokonaniem wyliczenia wartości pustych warto zauważyć, że w zbiorze występuje 78521 wierszy, które posiadają wyprodukowaną energię na poziomie 0, 78489 wierszy, które posiadają zmierzony poziom nasłonecznienia na poziomie 0 oraz 72864 wierszy, które posiadają obie wspomniane wartości na poziomie 0. KIerując się tymi obserwacjami, możemy dostrzec, że w przypadku 6 tys wierszy, które mają nasłonecznienie na poziomie 0 oraz energie większą niż 0 mogła nastąpić awaria czujnika nasłonecznienia, natomiast w przypadku wierszy, które mają nasłonecznienie większe od 0, awarię urządzenia dokonującego pomiaru wyprodukowanej energii.
Ze względu na to, że w zbiorze występują dla cisnienia (pressure) tylko wartości zerowe albo większe niż 0.7, uznano, że zerowe wartości są wynikiem awarii czujników i zastąpiono je średnią niezerowych wartości ciśnienia dla określonej lokalizacji. Jeśli wystąpiłaby sytuacja, że dla danej lokalizacji nie byłoby żadnego pomiaru ciśnienia to wartości zerowe zastępowane sa średnią ciśnienia dla wszystkich lokalizacji.
empty_values <- needed_data %>% filter(pressure == 0)
not_empty_values <- needed_data %>% filter(pressure > 0)
for(idplace in idplaces) {
empty_pressure <- empty_values %>% filter(place == idplace)
pressure_column <- not_empty_values %>% filter(place == idplace) %>% select(pressure)
average_value <- mean(pressure_column$pressure)
if(is.na(average_value)) {
pressure_column <- not_empty_values %>% select(pressure)
average_value <- mean(pressure_column$pressure)
}
for(i in 1:nrow(empty_pressure)) {
row <- empty_pressure[i, ]
needed_data$pressure[which(needed_data$measurementId == row$measurementId)] <- average_value
}
}
Założono, że w nocy nasłonecznienie wynosi 0, stąd zastapiono tylko wartości zerowe dla nasłonecznienia (radiation) oraz wyprodukowaną energią większą niż 0 z przediału godzinnego <6;18>. Wartości zerowe zastąpiono średnią wartościa parametru dla danej lokalizacji w danym miesiącu o danej godzinie.
empty_values <- needed_data %>% filter(radiation == 0 & only_hour > 5 & only_hour < 19 & energy > 0)
not_empty_values <- needed_data %>% filter(radiation > 0 & only_hour > 5 & only_hour < 19)
for(idplace in idplaces) {
empty_radiation <- empty_values %>% filter(place == idplace)
if(nrow(empty_radiation) > 0) {
for(i in 1:nrow(empty_radiation)) {
row <- empty_radiation[i, ]
cloudcover_low <- row$cloudcover - 0.1
cloudcover_up <- row$cloudcover + 0.1
radiation_column <- not_empty_values %>% filter(place == idplace & only_hour == row$only_hour & only_month == row$only_month & cloudcover > cloudcover_low & cloudcover < cloudcover_up) %>% select(radiation)
if(nrow(radiation_column) > 0) {
average_value <- mean(radiation_column$radiation)
if(!is.na(average_value)) {
needed_data$radiation[which(needed_data$measurementId == row$measurementId)] <- average_value
}
}
}
}
}
## [1] "Rozmiar zbioru: 235790"
| Średnia | Wartość minimalna | Wartość maksymalna | Odchylenie standardowe | Liczba zerowych wartości | 1. kwartyl | 2. kwartyl | 3. kwartyl | |
|---|---|---|---|---|---|---|---|---|
| age | 0.3144706 | 0.000 | 1.000 | 0.3779699 | 69350 | 0.0000000 | 0.1250000 | 0.719000 |
| temperature | 0.3734429 | 0.045 | 0.818 | 0.1722182 | 0 | 0.2120000 | 0.3480000 | 0.530000 |
| radiation | 0.1110318 | 0.000 | 0.710 | 0.1344122 | 74523 | 0.0000000 | 0.0390000 | 0.208000 |
| pressure | 0.7529589 | 0.730 | 0.769 | 0.0044807 | 0 | 0.7510000 | 0.7530000 | 0.755000 |
| windspeed | 0.0762241 | 0.000 | 0.696 | 0.0501477 | 1070 | 0.0420000 | 0.0660000 | 0.102000 |
| humidity | 0.6843925 | 0.160 | 1.000 | 0.1817457 | 0 | 0.5400000 | 0.7000000 | 0.840000 |
| dewpoint | 0.6055304 | 0.139 | 0.865 | 0.0956441 | 0 | 0.5350000 | 0.6190000 | 0.683000 |
| bearing | 0.4512351 | 0.000 | 0.769 | 0.2303888 | 2520 | 0.3000000 | 0.4780000 | 0.660000 |
| cloudcover | 0.3590429 | 0.000 | 1.000 | 0.2595479 | 38394 | 0.2300000 | 0.3100000 | 0.510000 |
| temp_param | 0.1224742 | 0.009 | 0.983 | 0.0631091 | 0 | 0.0730000 | 0.1110000 | 0.126000 |
| radiation_param | 0.2220020 | 0.108 | 1.000 | 0.0115436 | 0 | 0.2160000 | 0.2200000 | 0.222000 |
| pressure_param | 0.0002370 | 0.000 | 1.000 | 0.0039993 | 233263 | 0.0000000 | 0.0000000 | 0.000000 |
| wind_param | 0.0385247 | 0.000 | 1.000 | 0.0048811 | 2 | 0.0370000 | 0.0380000 | 0.039000 |
| humidity_param | 0.0638395 | 0.034 | 0.579 | 0.0420096 | 0 | 0.0440000 | 0.0440000 | 0.062000 |
| dewpoint_param | 0.1193809 | 0.063 | 0.415 | 0.0133907 | 0 | 0.1140000 | 0.1140000 | 0.118000 |
| bearing_param | 0.3454981 | 0.000 | 1.000 | 0.0340350 | 1 | 0.3360000 | 0.3360000 | 0.339000 |
| cloud_param | 0.2061627 | 0.000 | 1.000 | 0.0300724 | 1 | 0.1960000 | 0.1960000 | 0.198000 |
| distance | 0.4686464 | 0.000 | 1.000 | 0.2967915 | 570 | 0.1912568 | 0.4590164 | 0.726776 |
| altitude | 0.5463627 | 0.111 | 0.884 | 0.1806407 | 0 | 0.4190000 | 0.5640000 | 0.681000 |
| azimuth | 0.4545834 | 0.128 | 0.818 | 0.1965414 | 0 | 0.2950000 | 0.4250000 | 0.635000 |
| altitude_param | 0.2055096 | 0.000 | 0.982 | 0.1494217 | 1 | 0.0960000 | 0.1360000 | 0.266000 |
| azimuth_param | 0.3652845 | 0.000 | 1.000 | 0.1822820 | 1 | 0.2090000 | 0.2880000 | 0.482000 |
| pcnm1 | 0.4223529 | 0.000 | 1.000 | 0.2043798 | 13870 | 0.3770000 | 0.3780000 | 0.380000 |
| pcnm2 | 0.3537647 | 0.000 | 0.972 | 0.2142737 | 13870 | 0.2500000 | 0.3770000 | 0.422000 |
| pcnm3 | 0.6044706 | 0.000 | 1.000 | 0.2170462 | 13870 | 0.5510000 | 0.6050000 | 0.730000 |
| pcnm4 | 0.5189412 | 0.000 | 1.000 | 0.2555701 | 13870 | 0.3630000 | 0.5310000 | 0.634000 |
| pcnm5 | 0.4164706 | 0.000 | 1.000 | 0.2502325 | 13870 | 0.3310000 | 0.4270000 | 0.462000 |
| pcnm6 | 0.4940588 | 0.000 | 1.000 | 0.2392556 | 13870 | 0.3390000 | 0.4930000 | 0.493000 |
| pcnm7 | 0.1141765 | 0.000 | 1.000 | 0.2249332 | 13870 | 0.0310000 | 0.0520000 | 0.114000 |
| pcnm8 | 0.4033529 | 0.000 | 1.000 | 0.2636083 | 13870 | 0.2040000 | 0.4120000 | 0.511000 |
| pcnm9 | 0.5371176 | 0.000 | 1.000 | 0.2616246 | 13870 | 0.5270000 | 0.5320000 | 0.600000 |
| pcnm10 | 0.6276471 | 0.000 | 1.000 | 0.2123752 | 13870 | 0.5530000 | 0.6190000 | 0.717000 |
| pcnm11 | 0.3236471 | 0.000 | 1.000 | 0.2066428 | 13870 | 0.2570000 | 0.3270000 | 0.327000 |
| pcnm12 | 0.7567647 | 0.000 | 1.000 | 0.2289319 | 13870 | 0.7480000 | 0.7600000 | 0.884000 |
| pcnm13 | 0.6500588 | 0.137 | 1.000 | 0.1995126 | 0 | 0.6140000 | 0.6140000 | 0.738000 |
| pcnm14 | 0.4892941 | 0.000 | 1.000 | 0.1838311 | 13870 | 0.4320000 | 0.4730000 | 0.530000 |
| pcnm15 | 0.5709412 | 0.000 | 1.000 | 0.2046190 | 13870 | 0.6120000 | 0.6140000 | 0.615000 |
| mode | 0.1767311 | 0.000 | 1.000 | 0.2210455 | 94008 | 0.0000000 | 0.0560000 | 0.325000 |
| mode_param | 0.1967021 | -0.025 | 1.006 | 0.0534842 | 2 | 0.1580000 | 0.1940000 | 0.213000 |
| energy | 0.1687714 | 0.000 | 1.000 | 0.2106090 | 78521 | 0.0000000 | 0.0490000 | 0.332000 |
| Wartość minimalna | Wartość maksymalna | Liczba unikalnych wartości | |
|---|---|---|---|
| place | 0.000 | 0.425 | 17 |
| brand | 0.000 | 0.417 | 6 |
| latitude | 0.415 | 0.553 | 9 |
| longitude | 0.154 | 0.691 | 12 |
| day | 0.000 | 1.000 | 365 |
| hour | 0.000 | 1.000 | 19 |
| measurementId | 1.000 | 276488.000 | 235790 |
| model | 0.000 | 0.750 | 11 |
| year | 2012.000 | 2013.000 | 2 |